package com.thinkgem.jeesite.common.utils;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.session.InvalidSessionException;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;

/**
 * @Author:Kongxiangsheng
 * @DesCription:
 * @Date:Created in 16:22 2018/8/20
 * @Modified By:
 */
public class SessionUtils {
    private static final String CACHE_AUTH_INFO = "authInfo";
    private static final String CACHE_ROLE_LIST = "roleList";
    private static final String CACHE_AREA_LIST = "areaList";
    private static final String CACHE_OFFICE_LIST = "officeList";
    private static final String CACHE_OFFICE_LIST_ALL = "officeListAll";

    public static Session getSession() {
        try {
            Subject subject = SecurityUtils.getSubject();
            Session session = subject.getSession(false);
            if (null == session) {
                session = subject.getSession();
            }
            if (session != null) {
                return session;
            }
        } catch (InvalidSessionException e) {

        }
        return null;
    }

    /**
     * 清除当前用户缓存
     */
    public static void clearAttr() {
        removeAttrAuth();
        removeAttrRole();
        removeAttrArea();
        removeAttrOffice();
        removeAttrOfficeAll();
    }

    // =================== 当前用户机构信息 -begin ========================

    /**
     * 获取机构信息
     *
     * @return
     */
    public static Object getAttrOffice() {
        return getSession().getAttribute(CACHE_OFFICE_LIST);
    }

    /**
     * 保存机构信息
     *
     * @param value
     */
    public static void putAttrOffice(Object value) {
        getSession().setAttribute(CACHE_OFFICE_LIST, value);
    }

    /**
     * 清除Session中的机构信息
     */
    public static void removeAttrOffice() {
        getSession().removeAttribute(CACHE_OFFICE_LIST);
    }

    // =================== 全部机构信息 -begin ===================

    /**
     * 获取机构信息
     *
     * @return
     */
    public static Object getAttrOfficeAll() {
        return getSession().getAttribute(CACHE_OFFICE_LIST_ALL);
    }

    /**
     * 保存机构信息
     *
     * @param value
     */
    public static void putAttrOfficeAll(Object value) {
        getSession().setAttribute(CACHE_OFFICE_LIST_ALL, value);
    }

    /**
     * 清除Session中的机构信息
     */
    public static void removeAttrOfficeAll() {
        getSession().removeAttribute(CACHE_OFFICE_LIST_ALL);
    }

    // =================== 授权信息 -begin ===================

    /**
     * 获取授权信息
     *
     * @return
     */
    public static Object getAttrAuth() {
        return getSession().getAttribute(CACHE_AUTH_INFO);
    }

    /**
     * 保存授权信息
     *
     * @param value
     */
    public static void putAttrAuth(Object value) {
        getSession().setAttribute(CACHE_AUTH_INFO, value);
    }

    /**
     * 清除Session中的授权信息
     */
    public static void removeAttrAuth() {
        getSession().removeAttribute(CACHE_AUTH_INFO);
    }

    // =================== 角色信息 -begin ===================

    /**
     * 获取角色信息
     *
     * @return
     */
    public static Object getAttrRole() {
        return getSession().getAttribute(CACHE_ROLE_LIST);
    }

    /**
     * 保存角色信息
     *
     * @param value
     */
    public static void putAttrRole(Object value) {
        getSession().setAttribute(CACHE_ROLE_LIST, value);
    }

    /**
     * 清除Session中的角色信息
     */
    public static void removeAttrRole() {
        getSession().removeAttribute(CACHE_ROLE_LIST);
    }


    // =================== 区域信息 -begin ===================

    /**
     * 获取区域信息
     *
     * @return
     */
    public static Object getAttrArea() {
        return getSession().getAttribute(CACHE_AREA_LIST);
    }

    /**
     * 保存区域信息
     *
     * @param value
     */
    public static void putAttrArea(Object value) {
        getSession().setAttribute(CACHE_AREA_LIST, value);
    }

    /**
     * 清除Session中的区域信息
     */
    public static void removeAttrArea() {
        getSession().removeAttribute(CACHE_AREA_LIST);
    }
}
